from textwrap import dedent

from agno.agent import Agent
from agno.models.openai import OpenAIChat, OpenAILike
from agno.tools.reasoning import ReasoningTools
from configs.basic_config import ALI_GENERATION_MODEL, AGENT_URL, ALI_DASHSCOPE_API_KEY


reasoning_agent = Agent(
    # model=OpenAIChat(id="gpt-5-mini"), 支持function call的model
    model=OpenAILike(id=ALI_GENERATION_MODEL, name=ALI_GENERATION_MODEL, api_key=ALI_DASHSCOPE_API_KEY,
                     base_url=AGENT_URL),
    tools=[ReasoningTools(add_instructions=True)],
    instructions=dedent("""\
        你是一位具备强大分析能力的专家级问题解决助手！🧠

        你的问题处理方式：
        1. 首先，将复杂问题分解为其组成部分
        2. 清晰地陈述你的假设
        3. 制定结构化的推理路径
        4. 考虑多种视角
        5. 评估证据和反例
        6. 得出论证充分的结论

        在解决问题时：
        - 使用明确的逐步推理
        - 识别关键变量和约束条件
        - 探索替代方案
        - 突出不确定的领域
        - 清晰地解释你的思考过程
        - 考虑短期和长期影响
        - 明确评估权衡取舍

        对于定量问题：
        - 展示你的计算过程
        - 解释数字的重要性
        - 在适当时考虑置信区间
        - 识别源数据的可靠性

        对于定性推理：
        - 评估不同因素如何相互作用
        - 考虑心理和社会动态
        - 评估实际限制
        - 处理价值考量
        \
    """),
    add_datetime_to_context=True,
    stream_events=True,
    markdown=True,
)

# reasoning_agent.print_response(
#     "解决这个逻辑谜题：一个男人必须带着一只狐狸、一只鸡和一袋谷物过河。船只够大，只能容纳这个男人和一件物品。如果无人看管，狐狸会吃掉鸡，而鸡会吃掉谷物。这个男人怎样才能让所有东西都安全地过河？",
#     stream=True,
# )

# ┃  1 带鸡过河                                                                  ┃
# ┃     • 起点：狐狸 + 谷物（安全，狐狸不吃谷物）                                ┃
# ┃     • 对岸：鸡                                                               ┃
# ┃  2 独自返回起点                                                              ┃
# ┃     • 起点：男人 + 狐狸 + 谷物                                               ┃
# ┃     • 对岸：鸡                                                               ┃
# ┃  3 带狐狸过河                                                                ┃
# ┃     • 起点：谷物                                                             ┃
# ┃     • 对岸：男人 + 鸡 + 狐狸                                                 ┃
# ┃  4 带鸡返回起点                                                              ┃
# ┃     • 起点：男人 + 鸡 + 谷物                                                 ┃
# ┃     • 对岸：狐狸                                                             ┃
# ┃  5 带谷物过河                                                                ┃
# ┃     • 起点：鸡                                                               ┃
# ┃     • 对岸：男人 + 狐狸 + 谷物                                               ┃
# ┃  6 独自返回起点                                                              ┃
# ┃     • 起点：男人 + 鸡                                                        ┃
# ┃     • 对岸：狐狸 + 谷物                                                      ┃
# ┃  7 最后带鸡过河                                                              ┃
# ┃     • 起点：空                                                               ┃
# ┃     • 对岸：男人 + 狐狸 + 鸡 + 谷物 ✅                                       ┃
# ┃

reasoning_agent.print_response(
    "一家初创公司获得了50万美元的资金，需要决定将其用于营销还是产品开发。他们希望在12个月内实现增长和用户获取的最大化。他们应该考虑哪些因素，以及应该如何分析这个决策？",
    stream=True
)